Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / androidApp / src / google / kotlin / org / meshtastic / app / map / offline / pmtiles / OfflineVectorOverlay.kt

Displaying Raw • Download

androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/OfflineVectorOverlay.kt renovate/fastlane-2.x-lockfile (056eed64) Text, 4.28 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.app.map.offline.pmtiles

Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.DisposableEffect
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.runtime.NonRestartableComposable
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.key
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787com.google.android.gms.maps.model.LatLng
Tff7b72import T7ee787com.google.maps.android.compose.CameraPositionState
Tff7b72import T7ee787com.google.maps.android.compose.Polygon
Tff7b72import T7ee787com.google.maps.android.compose.Polyline
Tff7b72import T7ee787kotlinx.coroutines.withContext
Tff7b72import T7ee787org.meshtastic.core.common.util.ioDispatcher
Tff7b72import T7ee787java.io.File

Tff7b72private Tff7b72val Te6edf3WATER_FILL Tff7b72= Te6edf3ColorTb4b4b4(T79c0ff0Te6edf3x33_4FC3F7Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3WATER_STROKE Tff7b72= Te6edf3ColorTb4b4b4(T79c0ff0Te6edf3xFF_4FC3F7Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3ROADS_STROKE Tff7b72= Te6edf3ColorTb4b4b4(T79c0ff0Te6edf3xFF_9E9E9ETb4b4b4)
Tff7b72private Tff7b72val Te6edf3BOUNDARIES_STROKE Tff7b72= Te6edf3ColorTb4b4b4(T79c0ff0Te6edf3xFF_BDBDBDTb4b4b4)
Tff7b72private Tff7b72const Tff7b72val Te6edf3ROADS_WIDTH_PX Tff7b72= T79c0ff3f
Tff7b72private Tff7b72const Tff7b72val Te6edf3BOUNDARIES_WIDTH_PX Tff7b72= T79c0ff2f
Tff7b72private Tff7b72const Tff7b72val Te6edf3WATER_STROKE_WIDTH_PX Tff7b72= T79c0ff1.5f

T8b949e/**
* Draws a downloaded offline region's water, roads and boundaries as native `Polygon`/`Polyline` overlays — the same
* technique the sibling iOS app uses (`PMTilesMapView.swift`'s `OfflineVectorTileProvider`), decoding straight to
* shapes rather than rasterizing, so the offline basemap draws in the same coordinate space as node markers with no
* compositing seam. Only mounted while [region] covers the visible map and the user has manually enabled the offline
* overlay — a toggle, not a network-down gate; see `MapView.kt`'s `offlineOverlayEnabled` caller.
*/
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffOfflineVectorOverlayTb4b4b4(Te6edf3regionTb4b4b4: Te6edf3OfflineRegionTb4b4b4, Te6edf3archiveFileTb4b4b4: Te6edf3FileTb4b4b4, Te6edf3cameraPositionStateTb4b4b4: Te6edf3CameraPositionStateTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3archive Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3regionTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{ Te6edf3OfflineVectorArchiveTb4b4b4.Te6edf3openTb4b4b4(Te6edf3archiveFileTb4b4b4) Tb4b4b4} Tff7b72?: Tff7b72return
Te6edf3DisposableEffectTb4b4b4(Te6edf3archiveTb4b4b4) Tb4b4b4{ Te6edf3onDispose Tb4b4b4{ Te6edf3archiveTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}

Tff7b72val Te6edf3renderer Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3regionTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{ Te6edf3OfflineVectorRendererTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72var Te6edf3features Tff7b72by Te6edf3rememberTb4b4b4(Te6edf3regionTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{ Te6edf3mutableStateOfTff7b72<Te6edf3ListTff7b72<Te6edf3OfflineFeatureTff7b72>Tff7b72>Tb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}

Te6edf3LaunchedEffectTb4b4b4(Te6edf3regionTb4b4b4.Te6edf3idTb4b4b4, Te6edf3cameraPositionStateTb4b4b4.Te6edf3positionTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3bounds Tff7b72= Te6edf3cameraPositionStateTb4b4b4.Te6edf3projectionTff7b72?.Te6edf3visibleRegionTff7b72?.Te6edf3latLngBounds Tff7b72?: Tff7b72returnTf0883e@LaunchedEffect
Tff7b72val Te6edf3zoom Tff7b72= Te6edf3cameraPositionStateTb4b4b4.Te6edf3positionTb4b4b4.Te6edf3zoomTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3features Tff7b72= Te6edf3withContextTb4b4b4(Te6edf3ioDispatcherTb4b4b4) Tb4b4b4{ Te6edf3rendererTb4b4b4.Te6edf3featuresForTb4b4b4(Te6edf3regionTb4b4b4, Te6edf3archiveTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3boundsTb4b4b4) Tb4b4b4}
Tb4b4b4}

Te6edf3featuresTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3feature Tff7b72-Tff7b72>
Te6edf3keyTb4b4b4(Te6edf3featureTb4b4b4.Te6edf3layerNameTb4b4b4, Te6edf3featureTb4b4b4.Te6edf3ringsTb4b4b4) Tb4b4b4{
Tff7b72when Tb4b4b4(Te6edf3featureTb4b4b4.Te6edf3layerNameTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffwaterTa5d6ff" Tff7b72-Tff7b72> Te6edf3featureTb4b4b4.Te6edf3ringsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3ring Tff7b72-Tff7b72> Te6edf3WaterPolygonTb4b4b4(Te6edf3ringTb4b4b4) Tb4b4b4}

Ta5d6ff"Ta5d6ffroadsTa5d6ff" Tff7b72-Tff7b72> Te6edf3featureTb4b4b4.Te6edf3ringsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3line Tff7b72-Tff7b72> Te6edf3LineFeatureTb4b4b4(Te6edf3lineTb4b4b4, Te6edf3ROADS_STROKETb4b4b4, Te6edf3ROADS_WIDTH_PXTb4b4b4) Tb4b4b4}

Ta5d6ff"Ta5d6ffboundariesTa5d6ff" Tff7b72-Tff7b72>
Te6edf3featureTb4b4b4.Te6edf3ringsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3line Tff7b72-Tff7b72> Te6edf3LineFeatureTb4b4b4(Te6edf3lineTb4b4b4, Te6edf3BOUNDARIES_STROKETb4b4b4, Te6edf3BOUNDARIES_WIDTH_PXTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tf0883e@NonRestartableComposable
Tff7b72private Tff7b72fun Td2a8ffWaterPolygonTb4b4b4(Te6edf3ringTb4b4b4: Te6edf3ListTff7b72<Te6edf3LatLngTff7b72>Tb4b4b4) Tb4b4b4{
Te6edf3PolygonTb4b4b4(
Te6edf3points Tff7b72= Te6edf3ringTb4b4b4,
Te6edf3fillColor Tff7b72= Te6edf3WATER_FILLTb4b4b4,
Te6edf3strokeColor Tff7b72= Te6edf3WATER_STROKETb4b4b4,
Te6edf3strokeWidth Tff7b72= Te6edf3WATER_STROKE_WIDTH_PXTb4b4b4,
Te6edf3zIndex Tff7b72= Te6edf3OFFLINE_Z_INDEXTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Composable
Tf0883e@NonRestartableComposable
Tff7b72private Tff7b72fun Td2a8ffLineFeatureTb4b4b4(Te6edf3pointsTb4b4b4: Te6edf3ListTff7b72<Te6edf3LatLngTff7b72>Tb4b4b4, Te6edf3colorTb4b4b4: Te6edf3ColorTb4b4b4, Te6edf3widthTb4b4b4: Tffa657FloatTb4b4b4) Tb4b4b4{
Te6edf3PolylineTb4b4b4(Te6edf3points Tff7b72= Te6edf3pointsTb4b4b4, Te6edf3color Tff7b72= Te6edf3colorTb4b4b4, Te6edf3width Tff7b72= Te6edf3widthTb4b4b4, Te6edf3zIndex Tff7b72= Te6edf3OFFLINE_Z_INDEXTb4b4b4)
Tb4b4b4}

T8b949e/** Below node markers and waypoints, above the (absent, offline) live basemap. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3OFFLINE_Z_INDEX Tff7b72= Tff7b72-T79c0ff0.75f

Served by rngit 1.5.2 - Generated in 0.05s